#pragma once

#include <map>
#include <string>
#include <core/Utility.h>
#include "bondlib.h"

#define	SSBONDLIB_DATA_INVALID	0x7FFFFFFF

#define	SSBONDLIB_DAYS_INONEYEAR	240
#define	SSBONDLIB_DAYS_CACHE		60
#define	SSBONDLIB_DAYS_CALCULATE	30
#define	SSBONDLIB_AUTORESUMEDR_DATEBEGIN	20040519
#define	SSBONDLIB_AUTORESUMEDR_LIMIT		11

#define	SSBONDLIB_CODE_MAIN			"000001"
#define	SSBONDLIB_CODE_MAINSZN		"399001"
#define	SSBONDLIB_CODE_MAIN			"000001"
#define	SSBONDLIB_CODE_MAINSZN		"399001"
#define	SSBONDLIB_CODE_SZZS			"000001"	// 上证指数
#define	SSBONDLIB_CODE_SZYBL		"000009"	// 上证180指数
#define	SSBONDLIB_CODE_SZAG			"000002"	// 上证A股
#define	SSBONDLIB_CODE_SZBG			"000003"	// 上证B股
#define	SSBONDLIB_CODE_SZNCZ		"399001"	// 深证成指
#define	SSBONDLIB_CODE_SZNZZ		"399106"	// 深证综指
#define	SSBONDLIB_CODE_SZNCFAZ		"399002"	// 深证成份A指
#define	SSBONDLIB_CODE_SZNCFBZ		"399003"	// 深证成份B指
#define	SSBONDLIB_CODE_SZNFIRST		"000001"	// 深证第一支
#define	SSBONDLIB_CODE_SHAFIRST		"600000"	// 上证第一支
#define	SSBONDLIB_CODE_ZLDD			"000000"	// 主力大单

#define  SS_TWO_TF_FLAG "TS"//两年期


// some fixed length
#define	SSBONDLIB_MAX_CODE			12
#define	SSBONDLIB_MAX_CODE2			16	// 兼容较长代码
#define	SSBONDLIB_MAX_NAME			96
#define	SSBONDLIB_MAX_NAMEENU		80
#define	SSBONDLIB_MAX_SHORTNAME		32
#define	SSBONDLIB_MAX_DOMAIN		32
#define	SSBONDLIB_MAX_PROVINCE		32

enum PriceTypes {
	Trade_Price		=	0x00,
	Indicative_Price =	0x01
};

enum FreezeTypes {
	Normal_Price		=	0x00,
	Freeze_Price	=	0x01
};
// some enum values
#pragma pack(push)
#pragma pack(1)

////////////////////////////////////////////////////////////////////////////////
// Summary:
//     common types for use,EAC
// Remarks:
//     EACH TYPEDEF MEANS A SPECIAL CODING
//     NO CODING COMMENTS MEANS ALL VISIBLE CHAR IS VALID INCLUDE Chinese character
//     Coding:a-z A-Z 0-9 ,;. 甲乙丙丁
//     tFieldName	: means typedefed fixed char array
//     tscFieldName	: means semicolon(;) splited char array
//           类型名称Name                    // 类型解释Comment			// 类型编码Coding
typedef char tBondFullName[96];				// 债券全称,以'\0'结尾
typedef char tBondShortName[32];			// 债券简称,以'\0'结尾
typedef char tBondCode[SSBONDLIB_MAX_CODE];	// 证券代码,以'\0'结尾
typedef char tMarketCode[4];				// 市场代码,以'\0'结尾
typedef char tBondKey[33];					// 债券编码,
typedef char tListedMarket[8];				// CIB/SSE/SZE 代表不同的市场 "CIB"
typedef char tBondPublisher[8];				// 债券发行人
typedef char tBrokerId[4];					// 经纪公司id
typedef char tscListMarkets[128];			// 用';'隔开的流通市场
typedef char tscWarranters[101];			// 用‘;’隔开的担保人
typedef char tInterestRateType[3+1];		// 利率方式
typedef char tBondRating[11];				// 债券评级
typedef char tBondRateAgency[8];			// 债券评级机构
typedef char tscUnderwriters[256];			// 主承销商
typedef char tPriceStatus[4];				// 报价状态					// “0”：无报价，“1”：正常，“-”：1refer
typedef char tDate8[12];					// 年月日日期					// 如："19860414"
// 通用类型
typedef char tNullType[5];					//							// "NULL" 或者其他
typedef char tNonType[4];					//							// "NON"  或者其他
typedef char tFlagType;						// 1 或者 0

////////////////////////////////////////////////////////////////////////////////
// 债券静态数据结构

// typedef struct KLine_t {
// 	float	m_fOpen;						// 开盘价
// 	float	m_fHigh;						// 最高价
// 	float	m_fLow;							// 最低价
// 	float	m_fClose;						// 收盘价
// 	float	m_PreClose;					// 昨收价
// 	float	m_AvgPrice;					// 平均价
// } KLine, *PKLine;

// K线数据结构	CBondData::dataK
// typedef struct kdata_t {
// 	uint32_t				m_dwMarket;
// 	tBondKey			m_sBondKey;				    // 债券编码
// 	tBondCode			m_szCode;						// 证券代码,以'\0'结尾
// 	uint32_t				m_date;							// 日期 Format is YYMMDDHHMM for 5min, Format is YYYYMMDD for day-该注释是错误的！后台传过来的是time_t类型的！k线图是直接存储的！
// 	time_t				m_time;							// 时间　	与m_date一致．如果是是某日，则小时分秒均为0
// 	float				m_fOpen;						// 开盘价
// 	float				m_fHigh;						// 最高价
// 	float				m_fLow;							// 最低价
// 	float				m_fClose;						// 收盘价
// 	double				m_fAmount;						// 成交金额
// 	double				m_fVolume;						// 成交量
// 	double              m_fPosition;                    // 持仓量
// 	float				m_fSetPrc;						// 结算价
// 	uint32_t				m_dwAdvance;					// 仅指数有效
// 	uint32_t				m_dwDecline;					// 仅指数有效
// 	uint32_t				m_dwReserved;
// 
// 	bool operator< (const kdata_t &rhs) const
// 	{
// 		return m_time < rhs.m_time;
// 	}
// 	bool operator== (const kdata_t &rhs) const
// 	{
// 		return m_time == rhs.m_time;
// 	}
// } KDATA, *PKDATA;



// 基本信息数据结构 CBondData::dataBasetbl
// typedef struct basedata_t {
// 	tBondKey			m_sBondKey;					// 债券编码
// 	tBondCode			m_szCode;						// 证券代码,以'\0'结尾
// 	tBondFullName		m_szFull_Name;					// 债券全称
// 	tBondShortName		m_szShortName;					// 证券代码,以'\0'结尾
// 	time_t				m_time;							// 日期，time_t
// 	uint32_t				m_date;				 			// 日期	Format is YYYYMMDD for base data
// 	tBondPublisher		m_Issuer_Code;					//发行人
// 	int					m_Maturity_Term;				// 偿还期限
// 	char				m_Term_Unit[3+1];				//单位，两字段合并显示
// 														//	*系统计算;//剩余期限(年)	 //客户端计算
// 														//	*系统计算;//距下一付息日天数 //not defined
// 														//	*系统计算;//当前付息周期天数 //not defined
// 	uint32_t				m_Listed_Date;					//上市日
// 	uint32_t				m_Delisted_Date;				//下市日
// 	uint32_t				m_Interest_Start_Date;		//起息日
// 	uint32_t				m_Maturity_Date;				//到期日
// 	tscListMarkets		m_Listed_Market;			    //流通市场
// 	double				m_Issue_Amount;				//发行总额(万元)
// 	                                                    //	*系统计算;//债券余额		 //not defined
// 	float				m_Issue_Price;					//发行价格
// 	char				m_Coupon_Type[3+1];			//利率方式
// 	float				m_Coupon_Rate_Current;		//最新票面利率(%)
// 	char				m_Coupon_Frequency[3+1];		//付息频率
// 	char				m_Compound_Frequency[3+1];	//计息频率
// 	tBondRating			m_Rating_Current;				//债项评级
// 	tBondRateAgency		m_Rating_Institution_Code;	//债项评级机构
// 	uint32_t				m_Rating_Date;					//债项评级日期
// 	tscUnderwriters 	m_Underwriter_Code;			//(同一债券若有多条记录,用';'隔开显示)主承销商
// 	tNonType			m_Option_Type;					//='NON'显示'否';否则显示'是'是否含权
// 	tNullType			m_Redemption_No;				//当Redemption_No=NULL显示'否';否则显示'是' 是否可提前偿还
// 	char 				m_Rating_Augment[3+1];		//信用增级方式
// 	tscWarranters		m_Warranter;					//(若有多条记录，用';'隔开显示)担保人
// 	char				m_Institution_rating[7+1];	//P_institution_rating	当Institution_Type=‘GRT’，取Rate担保人评级
// 
// }BASEDATA, *PBASEDATA;

/////////////////////////////////////////////////////////////////////////////////////////////
// 债券行情使用数据结构

typedef struct bkquote_t {
public:
	tBondKey		m_BondKey;						//bondkey
	tBondCode		m_BondCode;						//债券代码
	char		    m_ListedMarket[8];					//市场

	char		    m_Bid[10];						//bid报价
	char		    m_BidYield[10];				//bid收益率，anson填
	char		    m_BidClean[10];				//bid净价，anson填
	char		    m_BidFull[10];					//bid全价，anson填
	char		    m_BidVol[12];					//bid数量
	tPriceStatus	m_BidStatus;					//bid状态，0--无报价，1--正常，-1--refer
	tFlagType		m_BidDiff2CDCFlag;			//bid偏离估值价标志

	char		    m_Ofr[10];					//ofr报价
	char		    m_OfrYield[10];				//ofr收益率，anson填
	char		    m_OfrClean[10];				//ofr净价，anson填
	char		    m_OfrFull[10];				//ofr全价，anson填
	char		    m_OfrVol[12];				//ofr数量
	tPriceStatus	m_OfrStatus;				//ofr状态，0--无报价，1--正常,-1--refer
	tFlagType		m_OfrDiff2CDCFlag;			//bid偏离估值价标志
	char		m_Operation[4];					//报价标志，0--new，1--refer，2--unrefer，3--update(refresh),4--add 1,5--reduce1,6-move1,7--move-1,8--modify
	char		m_BCUserID[32+1];				//报价用户ID
	char		m_BCCompanyID[32+1];			//报价机构ID
	char		m_Freeze;						//1--冻结
	time_t		m_Time;							//价格最新时间，服务端时间
} BKQUOTE, *PBKQUOTE;

// 行情刷新数据结构 CBondData::dataReport
typedef struct price_t {
	char			m_id[32 + 1];
	char			m_bp_status[4];				// 订单状态 \n-1：待审核 \n0：发布\n1：成交\n2：作废
	char			m_flag_bargain[8];				// 可议价*
	char			m_flag_relation[8];				// OCO
	char			m_flag_vip[8];					// vip标记
	tBrokerId		m_company_id;					// 经纪公司ID
	//char	m_company_name[64];						// 经纪公司名称
	char			m_flag_bad[8];					// 危险标记
	char			m_price_status[3];				// 价格状态，0:报价被refer或deal掉了 1:报价发布或者报价删除或者内部报价
	char			m_rebate[4];					// 是否返点(0-不返，1返点)
	char			m_return_point[12];				// 返点值(例: F0.10)
	char			m_clean_price[12];				// 净价
	char			m_full_price[12];				// 全价
	char			m_yield_price[8];				// 收益率
	char			m_sPrice[12];					// 价
	char			m_quotetype[4];					// 报价类型，0-有意向；1-净价；2-全价；3-收益率；4-利差
	char			m_sVolume[64];					// 量
	char			m_description[128];				// 价格备注
	char			m_interpret[128];				// 拆解后的报价，格式(T+0,2000;T+1,2000;远期,2000)，Add by Lance, 2021/09/10
	char			m_exercise[2];					// '0'-行权，'1'-到期
	time_t			m_create_time;					// 创建时间
	time_t			m_time;							// 更新时间
	price_t(){
		memset(this, 0, sizeof(price_t));
	};
public:
	bool IsPriceStatusValid()const{
		//价格状态只要不是0或者空即算有效
		return (strcmp(m_price_status, "") == 0 || strcmp(m_price_status, "0") == 0) ? false : true;
	}
} PRICE, *PPRICE;

// 行情刷新数据结构--参考价
typedef struct indx_price_t {
//	tBondKey		m_bondkey;					//产品ID== bondkey
	char		    m_symbol[4];				//bid/ask标识	1--bid,-1,ofr，0--表示确却双边报价或者净价，在客户端不显示bid/ofr图标
	char		    m_price[12];				//参考价
	char		    m_clean_price[12];			//参考价
	tBrokerId		m_company_id;				//经纪公司ID
	time_t		    m_modify_time;				//datetime 
	//int			m_version;					//版本索引，每个公司唯一自增，从0开始
} INDX_PRICE, *PINDX_PRICE;

struct price_settlement {
	char	m_original[128];//原始文本
	char	m_vol[16];		//量
	char	m_desc[64];		//原始备注
	char	m_typeold;		//'0'=T+0,'1'=T+1,'2'=远期
	char	m_bargin;		//'1'=需请示，'2'=必须请示
	unsigned char 	m_type;			//清算速度，1=T+0，2=T+1，4=远期，3,5,6,7为多选
	char	m_pstar;		//部分成交，0=全部，1=P*
	price_settlement()
	{
		memset(this, 0, sizeof(price_settlement));
	}
};
typedef std::list<price_settlement> PRICE_SETTLEMENT_LIST;

typedef struct report_t {
	uint32_t	        m_dwVersion;				// 报价版本号
	uint32_t	        m_dwMarket;					// 证券市场类型,see CBondData::StockMarket
	tBondKey		m_sBondKey;					// 债券编码
	char			m_sListedMarket[8];			// 市场代码
	//tBondCode		m_szCode;					// 证券代码,以'\0'结尾
	//tBondShortName	m_szShortName;				// 证券代码,以'\0'结尾
	time_t	        m_time;						// 更新时间
	time_t	        m_create_time;				// 创建时间
	char	        m_bp_status[4];				// m_deal_status, 与成交区分，故改为bp_status, 订单状态 \n-1：待审核 \n0：发布\n1：成交\n2：作废
	//char	        m_flag_bargain[8];			// 可议价*
	//char	        m_flag_relation[8];			// OCO
	//char	        m_flag_vip[8];				// vip标记
	char			m_company_id[33];			// 经纪公司ID
	//char	        m_company_name[64];			// 经纪公司名称
	//char	        m_flag_bad[8];				// 危险标记
	char	        m_price_status[3];			// 价格状态，0:报价被refer或deal掉了 1:报价发布或者报价删除或者内部报价(0表示无效报价，非0表示有效报价)
	//char	        m_rebate[4];				// 是否返点
	//char	        m_return_point[12];			// 返点值
	//char	        m_clean_price[12];			// 净价
	//char	        m_sBuyPrice[12];			// 申买价
	//char	        m_sBuyVolume[64];			// 申买量
	//char	        m_sSellPrice[12];			// 申卖价
	//char	        m_sSellVolume[64];			// 申卖量
	//char	        m_description[128];			// 价格备注
	PRICE	        m_bidinfo;					// bid信息
	PRICE	        m_askinfo;					// ask信息
	INDX_PRICE	    m_indx_info;				// 指示价、参考价Indicative Price
	char	        m_price_sel;				// 价格选项，'0':bid ofr 报价，'1':参考价
	char			m_tradePrice[12];			//成交价格 (交易所报价页面使用，王绍旭 2015/01/22)
	int64_t			m_pkg_id;					//网络包号
public:
	bool IsPriceStatusValid()const{
		// bid/ask两边报价状态只要一个有效就算有效
		return m_bidinfo.IsPriceStatusValid() || m_askinfo.IsPriceStatusValid();
	}
} REPORT, *PREPORT;

class xQBReportList_c
{
public:
	std::list<report_t> m_List;
};


// typedef struct quote_t {
// 	uint32_t	        m_dwMarket;				// 证券市场类型,see CBondData::StockMarket
// 	tBondCode		m_szCode;					// 证券代码,以'\0'结尾
// 	char	        m_sProperty[32];			// 性质,以'\0'结尾，如：空换，多换，多平，空平，双平，多开，空开，双开
// 	int		        m_nFlag;					// 现量增仓性质标志
// 	int		        m_nIndex;					// 报价信息ID
// 	int		        m_milsec;					// 最后修改毫秒
// 	time_t	        m_time;						// 更新时间
// 	float	        m_fPrice;					// 最新价
// 	float	        m_fVolume;					// 最新一笔的数量
// 	float	        m_fIncrement;				// 仓差
// 	float	        m_BidPrice1;				// 申买价一
// 	float	        m_AskPrice1;				// 申卖价一
// 	float		    m_AveragePrice;		      //	当日均价 add by givins.zhu 2016 11/17
// } QUOTE, *PQUOTE;

// typedef struct S_BONDLIB_EXPORT quote_t_BigSet : public quote_t{//add by givins.zhu 2016/11/17 大单设置
// 	quote_t_BigSet(){
// 	}
// 	quote_t_BigSet(QUOTE& qt){
// 		m_dwMarket = qt.m_dwMarket;
// 		m_nFlag = qt.m_nFlag;
// 		m_nIndex = qt.m_nIndex;
// 		m_milsec = qt.m_milsec;
// 		m_time = qt.m_time;
// 		m_fPrice = qt.m_fPrice;
// 		m_fVolume = qt.m_fVolume;
// 		m_fIncrement = qt.m_fIncrement;
// 		m_BidPrice1 = qt.m_BidPrice1;
// 		m_AskPrice1 = qt.m_AskPrice1;
// 		m_AveragePrice = qt.m_AveragePrice;
// 		FIELDCOPY(m_szCode, qt.m_szCode);
// 		FIELDCOPY(m_sProperty, qt.m_sProperty);
// 		m_nSpeedSel = 0;
// 		m_nSpeedNumb = 0;
// 		m_nImpact = 0;
// 	}
// 	enum emTrigger{
// 		trigVol = 0,
// 		trigImpact,
// 		trigSpeed
// 	};
// 	int m_nSpeedSel;//涨速选择
// 	int m_nSpeedNumb;//涨速
// 	int m_nImpact;//冲击成本
// 	std::vector<int> m_vctTrigger;//触发值
// 	//void operator = (const QUOTE& qt){
// 
// 	//}
// } QUOTEBigSet, *PQUOTEBigSet;

// typedef struct reportf_t {
// 	uint32_t	        m_dwMarket;						// 证券市场类型,see CStock::StockMarket
// 	tBondCode	    m_szCode;	// 证券代码,以'\0'结尾
// 	time_t	        m_time;						// 交易时间
// 	int				m_nUpdateMillisec;			// 最后修改毫秒
// 	uint32_t	        m_dwFlag;					// 停牌标志
// 	float	        m_fLast;					// 昨收（元）
// 	float	        m_fOpen;					// 今开（元）
// 	float	        m_fHigh;					// 最高（元）
// 	float	        m_fLow;						// 最低（元）
// 	float	        m_fNew;						// 最新（元）
// 	double	        m_fVolume;					// 成交量（股）
// 	double	        m_fAmount;					// 成交额（元）
// 	float	        m_fLstVolume;				// 最新数量（股）
// 	float	        m_fLstTurnover;			// 最新成交额（元）
// 	int	        m_fIncrementVol;			// 量差 非现量
// 	float	        m_fIncreTurnover;			// 本次成交额
// 	float	        m_fIncreInterest;			// 本次持仓差
// 	float	        m_OpenInterest;				// 持仓量（股）
// 	float	        m_fBuyPrice[5];				// 申买价（元）
// 	float	        m_fBuyVolume[5];			// 申买量（股）
// 	float	        m_fSellPrice[5];			// 申卖价（元）
// 	float	        m_fSellVolume[5];			// 申卖量（股）
// 	float		    m_AveragePrice;		//	当日均价 add by givins.zhu 2016 11/17
// } REPORTF, *PREPORTF;

// 行情分时数据结构 CBondData::dataMinute
// typedef struct minute_t {
// 	tBondKey		m_sBondKey;				// 债券编码
// 	tBondCode		m_szCode;					// 证券代码,以'\0'结尾
// 	tBondShortName	m_szShortName;				// 证券简称,以'\0'结尾
// 	uint32_t	        m_dwMarket;						// 证券市场类型
// 	uint32_t	        m_dwType;
// 	time_t	        m_time;						// 交易时间
// 	int				m_nUpdateMillisec;			// 最后修改毫秒
// 	float			m_fOpen;					// 开盘价
// 	float	        m_fHigh;					// 最高价
// 	float	        m_fLow;						// 最低价
// 	float	        m_fNew;						// 最新价
// 	float			m_fPreClose;				// 昨收价
// 	float	        m_fPosit;					// 持仓量
// 	double	        m_fVolume;					// 成交量
// 	double	        m_fAmount;					// 成交额
// 
// 	bool operator== (const minute_t &rhs) const
// 	{
// 		return m_time == rhs.m_time;
// 	}
// } MINUTE, *PMINUTE;

// 债券现金数据结构 CBondData::dataCash
// typedef struct cash_t {
// 	uint32_t	        m_dwType;					// 
// 	uint32_t	        m_dwMarket;				// 证券市场类型,see CBondData::StockMarket
// 	tBondCode		m_szCode;					// 证券代码,以'\0'结尾
// 	time_t	        m_time;						// 交易时间
// 	float	        m_fHigh;					// 最高价（元）
// 	float	        m_fLow;						// 最低价（元）
// 	float	        m_fNew;						// 最新价（元）
// 	float	        m_fVolume;					// 成交量（股）
// 	float	        m_fAmount;					// 成交额（元）
// } CASH, *PCASH;
// 
// typedef struct commpacket_t {
// 	uint32_t	m_dwTag;			// = STKLIB_COMMPACKET_TAG
// 	uint32_t	m_dwDataType;		// see CStock::DataType
// 	uint32_t	m_dwCount;
// 
// 	union
// 	{
// 		REPORTF *	m_pReport;		// 行情刷新数据
// 		MINUTE *	m_pMinute;		// 分时成交数据
// 		KDATA *		m_pKdata;		// 补充历史日线数据
// 		void *		m_pData;
// 	};
// } COMMPACKET, *PCOMMPACKET;

/////////////////////////////////////////////////////////////////////////////////////////////
//交易所报价 add by lancezhao 20140819
typedef struct xcquote_t{
	tBondKey		m_sBondKey;					// 债券编码
	//tBondCode		m_sBondCode;				// 证券代码,以'\0'结尾
	char		    m_sListedMarket[8];			// 市场

	char			m_BidPriceYield[12];		// bid收益率
	char			m_BidPriceClean[12];		// bid净价
	char			m_BidVol[10];				// bid量
	char			m_OfrPriceYield[12];		// ofr收益率
	char			m_OfrPriceClean[12];		// ofr净价
	char			m_OfrVol[10];				// ofr量

	time_t	        m_time;						// 交易时间
}XCQUOTE, *PXCQUOTE;


// 债券行情使用数据结构结束
/////////////////////////////////////////////////////////////////////////////////////////////
#pragma pack(pop)

//复权信息
// class S_BONDLIB_EXPORT CKTFRightUnit{
// public:
// 	CKTFRightUnit(){
// 		//m_stCurID = m_stFrontID = _T("");
// 		//m_nDate = 0;
// 		m_fCurYesClose = m_fFrontYesClose = 0.0f;
// 	}
// 
// 	CKTFRightUnit	& operator = (const CKTFRightUnit &src){
// 		m_stCurID = src.m_stCurID;
// 		m_stFrontID = src.m_stFrontID;
// 		m_fCurYesClose = src.m_fCurYesClose;
// 		m_fFrontYesClose = src.m_fFrontYesClose;
// 		return *this;
// 	}
// 	std::string m_stCurID, m_stFrontID;
// 	//int m_nDate;
// 	float m_fCurYesClose, m_fFrontYesClose;  //昨收
// 	float GetReduce() const{
// 		if (m_fFrontYesClose > 0.01f && m_fCurYesClose > 0.01f) return m_fFrontYesClose - m_fCurYesClose;
// 		return 0.0f;
// 	}
// 
// };

// class S_BONDLIB_EXPORT CKTFRightInfo{
// public:
// 	CKTFRightInfo(){ m_tLastDate = -1; }
// 	~CKTFRightInfo(){ ; }
// 	void clear(){
// 		m_mapRecuce.clear();
// 	}
// 
// 	float GetReduce(const time_t& tTime){
// 		float fTemp = 0.0f;
// 		for (std::map<time_t, CKTFRightUnit>::const_iterator itr = m_mapRecuce.begin();
// 			itr != m_mapRecuce.end(); itr++){
// 			if (tTime < itr->first){
// 				fTemp += itr->second.GetReduce();
// 				if (fTemp < 0.0001f && fTemp > -0.0001f) return 0.0f;
// 			}
// 		}
// 		return fTemp;
// 	}
// 	time_t GetLastDate(){
// 		if (m_tLastDate <= 0){
// 			std::map<time_t, CKTFRightUnit>::const_reverse_iterator itr = m_mapRecuce.rbegin();
// 			if (itr != m_mapRecuce.rend()){
// 				m_tLastDate = itr->first;
// 			}
// 		}
// 		return m_tLastDate;
// 	}
// 
// 	std::map<time_t, CKTFRightUnit> m_mapRecuce;
// 
// 	time_t m_tLastDate;
// };
/***
	单个债券信息类，禁用memcpy和memset等c函数，其它c++类执行同样标准

	brief:20150803 访问函数修改成const,支持const CBondInfo&引用传值
	
*/

/*
	CBondInfo的具体实现选择开关宏
	当USE_BOND_DEBUG定义后,CBondInfoDebug将被typedef成CBondInfo
	当USE_BOND_OLD定义后,CBondInfoOld将被typedef成CBondInfo,这是原始的CBondInfo
	当USE_BOND_IMPL定义后,CBondInfoImpl将被typedef成CBondInfo

	CBondInfoDebug的优势:
		内部使用CBondInfoImpl指针,因此更改CBondInfoImpl.h头文件,无需重编整个工程
		这也是最终的版本
*/
//#define USE_BOND_IMPL
#define USE_BOND_DEBUG

#ifdef USE_BOND_IMPL
#include "BondField/CBondInfoImpl.h"
typedef CBondInfoImpl CBondInfo;
#elif defined(USE_BOND_DEBUG)
#include "BondField/CBondInfoDebug.h"
typedef CBondInfoDebug CBondInfo;
#endif

